package quarto.controller.client;

import quarto.controller.client.strategy.*;
import quarto.model.Piece;

/**
 * Representatie van een computer speler<br />
 * Regelt alles intern via een gekozen strategie
 * @knows
 * - Naam van deze player
 * - Huidige Piece
 * - Strategy
 * @does
 * - Bepaalt de locatie van huidig Piece
 * - Bepaald Piece voor de tegenstander
 * @author Frank Borgonjen & Tim Smit
 */
public class ComputerPlayer extends Player 
{
    public static final int SLEEPTIME = 250;
    /**
     * Construeert een computer speler, 
     * zet de strategie standaard op DumbStrategy
     */
    public ComputerPlayer()
    {
        super();
        this.setStrategy(new DumbStrategy());
    }
    
    /**
     * Verander de strategie van de speler
     * @param strategy
     */
    public void setStrategy(Strategy strategy)
    {
        this.strategy = strategy;
    }
    
    /**
     * Geeft de huidige strategie weer
     * @return huidige strategie
     */
    public Strategy getStrategy()
    {
        return this.strategy;
    }

    /**
     * Geeft een locatie terug aan de hand van de strategie
     * @param piece
     * @return de locatie van het stuk
     */
    @Override
    public int getLocationForPiece(Piece piece)
    {
        try
        {
            Thread.sleep(SLEEPTIME);
        }
        catch (InterruptedException ex) {}
        
        return this.strategy.getLocationForPiece(piece);
    }

    /**
     * Geeft aan de hand van de strategie een nieuw stuk terug
     * @return een nieuw stuk
     */
    @Override
    public Piece getNewPiece()
    {
        try
        {
            Thread.sleep(SLEEPTIME);
        }
        catch (InterruptedException ex) {}
        
        return this.strategy.getNewPiece();
    }
}
